x86: Fix an S3 bug caused by x_firmware_waking_vector
authorKeir Fraser <keir.fraser@citrix.com>
Thu, 15 May 2008 08:38:00 +0000 (09:38 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Thu, 15 May 2008 08:38:00 +0000 (09:38 +0100)
According to ACPI spec., x_firmware_waking_vector in FACS is for
waking up in protected mode and firmware_waking_vector is for in real
mode. Xen once use x_firmware_waking_vector which can make S3 failed
on some platform. This patch fixed the bug by using non-x one.

Signed-off-by: Huacai Chen <huacai.chen@intel.com>
xen/arch/x86/acpi/boot.c

index 1cc148b2e3f4fb339522d14ffbae7b47dd159d3b..c42c4338d052ba9c38d589b4b2c8aa83aba1b35d 100644 (file)
@@ -441,17 +441,9 @@ acpi_fadt_parse_sleep_info(struct acpi_table_fadt *fadt)
                        "FACS is shorter than ACPI spec allow: 0x%x",
                        facs->length);
 
-       if ((rsdp->revision < 2) || (facs->length < 32)) {
-               acpi_sinfo.wakeup_vector = facs_pa + 
-                       offsetof(struct acpi_table_facs,
-                                firmware_waking_vector);
-               acpi_sinfo.vector_width = 32;
-       } else {
-               acpi_sinfo.wakeup_vector = facs_pa +
-                       offsetof(struct acpi_table_facs,
-                                xfirmware_waking_vector);
-               acpi_sinfo.vector_width = 64;
-       }
+       acpi_sinfo.wakeup_vector = facs_pa + 
+               offsetof(struct acpi_table_facs, firmware_waking_vector);
+       acpi_sinfo.vector_width = 32;
 
        printk(KERN_INFO PREFIX
               "                 wakeup_vec[%"PRIx64"], vec_size[%x]\n",